package com.duanjw.springboot.retry;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.retry.annotation.Backoff;
import org.springframework.retry.annotation.EnableRetry;
import org.springframework.retry.annotation.Retryable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * 简单 Web 应用
 *
 * <p>
 * 运行main方法后通过浏览器访问`localhost:8080`，可看到`Hello World!`
 * <p>
 * 注解说明
 * 1. @EnableAutoConfiguration：开启自动配置，由于`spring-boot-starter-web`内置了 Tomcat，所以会启动一个 web 项目，默认端口 8080
 * 2. @RestController：将类标识为`Controller`，同时所有接口的返回数据类型是 JSON，其实就是 SpringMVC 中 @Controller 和 @ResponseBody 组合
 * 3. @RequestMapping：提供路由信息，使用 HTTP 地址访问 / 将会调用到 home() 方法
 *
 * @author duanjw
 * @since 2013-11-23
 */
@EnableAutoConfiguration
@RestController
@EnableRetry
public class RetryApplication {
    final Logger log = LoggerFactory.getLogger(RetryApplication.class);
    /**
     * 程序入口
     *
     * @param args
     */
    public static void main(String[] args) {
        // 引导应用程序启动spring，同时会启动Tomcat
        SpringApplication.run(RetryApplication.class, args);
    }

    /**
     * 主页面
     * <p>
     * 访问：curl localhost:8080
     * <p>
     *
     * @return
     */
    @RequestMapping("/")
    @Retryable(value = Exception.class, maxAttempts = 4, backoff = @Backoff(delay = 1000L, multiplier = 1.5))
    String home() {
        log.info("时间：{}", System.currentTimeMillis());
        int num = 0;
        int result = 1 / num;
        return "Result：" + result;
    }
}
